package com.xinggq.common.context;

/**
 * 用户上下文提供者接口
 * 定义获取用户信息的抽象方法，支持不同环境下的不同实现
 * 
 * @author xinggq
 * @since 2025/1/20
 */
public interface UserContextProvider {

  /**
   * 获取当前用户信息
   * 
   * @return 用户信息，如果未登录或获取失败返回null
   */
  UserInfo getCurrentUser();

  /**
   * 检查当前是否有已认证的用户
   * 
   * @return 如果有已认证用户返回true，否则返回false
   */
  boolean hasCurrentUser();

  /**
   * 获取提供者的优先级
   * 数值越小优先级越高，用于多个Provider存在时的选择
   * 
   * @return 优先级数值
   */
  default int getPriority() {
    return 100;
  }

  /**
   * 判断当前Provider是否适用于当前环境
   * 
   * @return 如果适用返回true，否则返回false
   */
  boolean isApplicable();
}